home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 045a / gobblr.zip / RDUNIX.C < prev    next >
C/C++ Source or Header  |  1991-10-04  |  6KB  |  185 lines

  1. /************************************************************************
  2. ** MODULE INFORMATION*
  3. **********************
  4. **     FILE     NAME:       TEST.C
  5. **     SYSTEM   NAME:       PACKET DISPATCHER
  6. **     ORIGINAL AUTHOR(S):  Tirza van Rijn
  7. **     VERSION  NUMBER:     v1.00
  8. **     CREATION DATE:       1991/4/18
  9. **
  10. ** DESCRIPTION: Testfile
  11. **              
  12. *************************************************************************
  13. ** CHANGES INFORMATION **
  14. *************************
  15. ** REVISION:    $Revision:   1.0  $
  16. ** WORKFILE:    $Workfile:   TEST.C  $
  17. ** LOGINFO:     $Log:   I:/TIRZA/CPROG/BEHOLDER/APS/READDUMP/VCS/TEST.C_V  $
  18. **              
  19. **                 Rev 1.0   18 Apr 1991 15:26:54   tirza
  20. **              Initial revision.
  21. *************************************************************************/
  22. #if ! defined(PRD)
  23. static char _pvcs_hdr[] =
  24. "$Header:   I:/TIRZA/CPROG/BEHOLDER/APS/READDUMP/VCS/TEST.C_V   1.0   18 Apr 1991 15:26:54   tirza  $";
  25. #endif
  26.  
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29. #include <ctype.h>
  30. #include <string.h>
  31. #include <fcntl.h>
  32.  
  33.  
  34. #define REC_FRAME       0xF8        /* Marks start of a frame */
  35. #define BYTE            unsigned char
  36.  
  37. struct rec_hdr {
  38.     unsigned char type;
  39.     short len;
  40. };
  41.  
  42. /* Compare DP.H _DPBUF for the first 6 items */
  43. static struct frame {
  44.     short Dev;                      /* Logic dev# [0..DPMAXDEV-1]  */
  45.     unsigned long ClockMs;          /* Timestamp in micro seconds  */
  46.     unsigned short Status;          /* Status bits - internal use  */
  47.     unsigned short Size;            /* Packet length in bytes      */
  48.     BYTE *pBuf;                     /* Pointer to packet's content */
  49.     struct frame *pNext;            /* Pointer - internal use      */
  50.     BYTE DestAddr [6];              /* Packet destination address  */
  51.     BYTE SrcAddr [6];               /* Packet source address       */
  52.     BYTE PacketType [2];            /* Protocol type               */
  53.     BYTE Data[1600];                /* Packet data contents        */
  54. };
  55.  
  56.  
  57. int ReadByteFromFile (FILE *file, BYTE *b)
  58. {
  59.     return ((fread(b, 1, 1, file) == 1) ? 0 : EOF);
  60. }
  61.  
  62. int ReadIntFromFile (FILE *file, short *i)
  63. {
  64.     BYTE t1, t2;
  65.  
  66.     if (ReadByteFromFile(file, &t1) == EOF)
  67.         return (EOF);
  68.     if (ReadByteFromFile(file, &t2) == EOF)
  69.         return (EOF);
  70.     *i = (t2 << 8) | t1;
  71.     return (0);
  72. }
  73.  
  74. int ReadLongFromFile (FILE *file, long *l)
  75. {
  76.     BYTE t1, t2, t3, t4;
  77.  
  78.     if (ReadByteFromFile(file, &t1) == EOF)
  79.         return (EOF);
  80.     if (ReadByteFromFile(file, &t2) == EOF)
  81.         return (EOF);
  82.     if (ReadByteFromFile(file, &t3) == EOF)
  83.         return (EOF);
  84.     if (ReadByteFromFile(file, &t4) == EOF)
  85.         return (EOF);
  86.     *l = (t4 << 24) | (t3 << 16) | (t2 << 8) | t1;
  87.     return (0);
  88. }
  89.  
  90. hexdump (BYTE *Data, unsigned short Length)
  91. {
  92.     int i, j;
  93.     int c;
  94.  
  95.     for (i=0;i<(int)Length;i++)
  96.     {
  97.         printf ("%02x ", Data[i]);
  98.         if ((i & 15) == 15)
  99.         {
  100.             for (j=i-15;j<=i;j++)
  101.             {
  102.                 c = (int) Data[j];
  103.                 if (c >= ' ' && c <= '~')
  104.                     putchar (c);
  105.                 else
  106.                     putchar ('.');
  107.             }
  108.             printf("\n");
  109.         }
  110.     }
  111.     for (i=(int)Length & 15;i<16;i++)
  112.         fputs("   ", stdout);
  113.     for (;j<(int)Length;j++)
  114.     {
  115.         c = (int) Data[j];
  116.         if (c >= ' ' && c <= '~')
  117.             putchar (c);
  118.         else
  119.             putchar ('.');
  120.     }
  121.     printf("\n");
  122. }
  123.  
  124.  
  125. void main(int argc, char *argv[])
  126. {
  127.     int t = 1;
  128.     int i;
  129.     FILE *dumpfile;
  130.     struct rec_hdr hdr;
  131.     struct frame buf;
  132.  
  133.     if (argc == 2)
  134.         dumpfile = fopen(argv[1], "r");
  135.     else
  136.         dumpfile = fopen("netcapt.dmp", "r");
  137.     if (dumpfile != NULL)
  138.     {
  139.         while ((ReadByteFromFile(dumpfile, &hdr.type) == 0) &&
  140.                (ReadIntFromFile(dumpfile, &hdr.len) == 0))
  141.         {
  142.             if (hdr.type == REC_FRAME)
  143.             {
  144.                 if ((ReadIntFromFile (dumpfile, &buf.Dev) == 0) &&
  145.                     (ReadLongFromFile (dumpfile, &buf.ClockMs) == 0) &&
  146.                     (ReadIntFromFile (dumpfile, &buf.Status) == 0) &&
  147.                     (ReadIntFromFile (dumpfile, &buf.Size) == 0) &&
  148.                     (fread(&buf.pBuf, sizeof(buf.pBuf), 1, dumpfile) == 1) &&
  149.                     (fread(&buf.pNext, sizeof(buf.pNext), 1, dumpfile) == 1) &&
  150.                     (fread(&buf.DestAddr, sizeof(BYTE), 6, dumpfile) == 6) &&
  151.                     (fread(&buf.SrcAddr, sizeof(BYTE), 6, dumpfile) == 6) &&
  152.                     (fread(&buf.PacketType, sizeof(BYTE), 2, dumpfile) == 2) &&
  153.                     (fread(&buf.Data, sizeof(BYTE), (buf.Size-(6+6+2)), dumpfile) == (buf.Size-(6+6+2))))
  154.                 {
  155.                     printf("FRAME #%d\n", t++);
  156.                     printf("Frame length = %d\n", hdr.len);
  157.                     printf("Logic device # = %d\n", buf.Dev);
  158.                     printf("Timestamp (in us): %d:%02d:%02d\n", (int)((buf.ClockMs / 1000000L) % 1000),
  159.                             (int)((buf.ClockMs / 1000L) % 1000), (int)(buf.ClockMs % 1000));
  160.                     printf("Status %d\n", buf.Status);
  161.                     printf("Packet length (in bytes) = %d\n", buf.Size);
  162.                     printf("Destination address: %02x:%02x:%02x:%02x:%02x:%02x\n",
  163.                             buf.DestAddr[0], buf.DestAddr[1],
  164.                             buf.DestAddr[2], buf.DestAddr[3],
  165.                             buf.DestAddr[4], buf.DestAddr[5]);
  166.                     printf("Source address: %02x:%02x:%02x:%02x:%02x:%02x\n",
  167.                             buf.SrcAddr[0], buf.SrcAddr[1],
  168.                             buf.SrcAddr[2], buf.SrcAddr[3],
  169.                             buf.SrcAddr[4], buf.SrcAddr[5]);
  170.                     printf("Protocol type: %02x%02x\n", buf.PacketType[0], buf.PacketType[1]);
  171.                     printf("Data:\n");
  172.                     hexdump(buf.Data, (buf.Size-(6+6+2)));
  173.                     printf("\n\n\n");
  174.                 }
  175.             }
  176.             else
  177.                 fread(&buf, sizeof(BYTE), (hdr.len-3), dumpfile);
  178.         }
  179.     }
  180.     else
  181.         printf("Can't open dumpfile\n");
  182.     fclose(dumpfile);
  183. }
  184.  
  185.